using System;
using Csla;
using ENT.GP.Datos.MysqlHelper;
using System.Data;

namespace ENT.GP.Core
{
    [Serializable]
    public class ProvinciaLookup : NameValueListBase<int, string>
    {
        #region Factory Methods

        private static ProvinciaLookup _list;
        /// <summary>
        /// Obtiene una coleccion de Provincias 
        /// </summary>
        /// <param name="Codigo">Codigo para seleccionar las provincias: Hay dos opciones PROVINCIA y PROVINCIAR</param>
        /// <returns></returns>
        public static ProvinciaLookup GetNameValueList(string Codigo)
        {
            if (_list == null)
                _list = DataPortal.Fetch<ProvinciaLookup>(new SingleCriteria<ProvinciaLookup,string>(Codigo));
            return _list;
        }
        /// <summary>
        /// Obtiene una coleccion de Provincias por Regiones del Ecuador y centros Regionales del Senplades
        /// </summary>
        /// <param name="idRegion">Identificador de la Region</param>
        /// <returns></returns>
        public static ProvinciaLookup GetNameValueList(int idRegion)
        {
            if (_list == null)
                _list = DataPortal.Fetch<ProvinciaLookup>(new SingleCriteria<ProvinciaLookup, int>(idRegion));
            return _list;
        }

        public static void InvalidateCache()
        {
            _list = null;
        }

        private ProvinciaLookup()
        { /* require use of factory methods */ }

        #endregion

        #region Data Access

        private void DataPortal_Fetch(SingleCriteria<ProvinciaLookup,string> criteria)
        {
            RaiseListChangedEvents = false;
            IsReadOnly = false;

            HelperMySql objhm = HelperMySql.ObtenerConexion("");
            MySql.Data.MySqlClient.MySqlParameter []parametros=new MySql.Data.MySqlClient.MySqlParameter[2];
            parametros[0]=new MySql.Data.MySqlClient.MySqlParameter("CODIGO",criteria.Value);
            parametros[1] = new MySql.Data.MySqlClient.MySqlParameter("IDEMPR", 0);
            int numTmp = 0;
            foreach (DataRow items in objhm.EjecutarStoreProcedure(parametros, "Listar_Catalogo_Codigo").Tables[0].Rows)
            {
                int.TryParse(items[0].ToString(), out numTmp);
                this.Add(new NameValueListBase<int, string>.NameValuePair(numTmp, items[2].ToString()));
            }

            IsReadOnly = true;
            RaiseListChangedEvents = true;
        }
        private void DataPortal_Fetch(SingleCriteria<ProvinciaLookup, int> idRegion)
        {
            RaiseListChangedEvents = false;
            IsReadOnly = false;

            HelperMySql objhm = HelperMySql.ObtenerConexion("");
            MySql.Data.MySqlClient.MySqlParameter[] parametros = new MySql.Data.MySqlClient.MySqlParameter[1];
            parametros[0] = new MySql.Data.MySqlClient.MySqlParameter("IDPAPA", idRegion.Value);
            int numTmp = 0;
            foreach (DataRow items in objhm.EjecutarStoreProcedure(parametros, "Listar_Catalogo_Padre").Tables[0].Rows)
            {
                int.TryParse(items[0].ToString(), out numTmp);
                this.Add(new NameValueListBase<int, string>.NameValuePair(numTmp, items[2].ToString()));
            }

            IsReadOnly = true;
            RaiseListChangedEvents = true;
        }

        #endregion
    }
}
